﻿//using System;
//using System.Collections.Generic;
//using System.IO;
//using System.Linq;
//using System.Text;
//using Common.Lib.Persistence.Database;
//using NHibernate.Cfg;
//using NHibernate.Tool.hbm2ddl;

//namespace NHibernate.Util
//{
//    public abstract class NHibernateDBGeneratorBase : IDatabaseGenerator, ISqlGenerator
//    {
//        protected abstract Configuration CreateConfiguration();
//        protected abstract void CreatePhysicalDatabase(string path);
//        protected abstract string GenerateDatabasePath();

//        private ISessionFactory Factory { get; set; }
//        private string _currentDatabasePath;
//        private Configuration _config;
//        public Configuration NHibernateConfig
//        {
//            get
//            {
//                if (_config == null)
//                    _config = CreateConfiguration();
//                return _config;
//            }
//            private set
//            {
//                _config = value;
//            }
//        }

//        protected bool IsDatabaseGenerated
//        {
//            get;
//            set;
//        }

//        public void GenerateDatabase()
//        {
//            if (IsDatabaseGenerated) return;

//            _currentDatabasePath = GenerateDatabasePath();
//            CreatePhysicalDatabase(_currentDatabasePath);
//            SchemaExport export = new SchemaExport(NHibernateConfig);
//            export.Create(false, true);
//            IsDatabaseGenerated = true;
//        }

//        public void CloseDatabase()
//        {
//            IsDatabaseGenerated = false;
//        }

//        public string DatabasePath
//        {
//            get 
//            {
//                if (!IsDatabaseGenerated && string.IsNullOrWhiteSpace(_currentDatabasePath))
//                    _currentDatabasePath = GenerateDatabasePath();
//                return _currentDatabasePath; 
//            }
//        }

//        public string GenerateSqlScript()
//        {
//            SchemaExport exporter = new SchemaExport(NHibernateConfig);
//            string tmpPath = Directory.GetCurrentDirectory() + "\\" + Guid.NewGuid().ToString() + ".sql";
//            exporter.SetOutputFile(tmpPath);
//            exporter.Create(true, false);

//            string result = null;
//            if (File.Exists(tmpPath))
//            {
//                using(FileStream stream = File.OpenRead(tmpPath))
//                using (StreamReader reader = new StreamReader(stream))
//                {
//                    result = reader.ReadToEnd();
//                    reader.Close();
//                    stream.Close();
//                }

//                File.Delete(tmpPath);
//            }
//            return result;
//        }
//    }
//}
